home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / reader_requests / scilab / tests / dialogs.sci < prev    next >
Text File  |  1999-09-16  |  7KB  |  259 lines

  1. function rep=x_message(comment,btns)
  2. // message - dialogue affichant un message
  3. //%Syntaxe
  4. // message(comment)
  5. //%Parametres
  6. //comment : vecteur de chaine contenant le texte du message
  7. //%Remarques
  8. //Dans l'environnement Xwindow  cette  macro provoque  l'ouverture d'une
  9. //fenetre de message. L'utilisateur doit confirmer la lecture du message
  10. //en cliquant dans "ok"
  11. //
  12. //Dans un autre environnement la macros affiche le message dans
  13. // la fenetre scilab et attend que l'utilisateur confirme la lecture
  14. // par un retour-chariot
  15. //%exemple
  16. //  message(['Identification du systeme';'methode des moindres carres'])
  17. //!
  18. rep=[]
  19. [lhs,rhs]=argn(0)
  20. comment=matrix(comment,prod(size(comment)),1)
  21. if rhs==1 then
  22.   write(%IO(2),[comment;' ';'Ok ?';' '])
  23. else
  24.   if size(btns,'*')==1
  25.     write(%IO(2),[comment;' ';'Ok ?';' '])
  26.   else
  27.     write(%IO(2),[comment;' ';btns(:);' '])
  28.     str=readline()    
  29.     rep=find(str==btns)
  30.   end
  31. end
  32.  
  33.  
  34. //str=read(%IO(1),1,1,'(a)')
  35.  
  36.  
  37. function str=x_dialog(comment,default)
  38. // dialog - dialogue pour l'acquisition d'une reponse
  39. //%Syntaxe
  40. // str=dialog(comment [,default])
  41. //%Parametres
  42. //comment : vecteur de chaine contenant le texte commentaire de la 
  43. //          reponse demandee
  44. //default : reponse par defaut, peut etre donnee par un vecteur de
  45. //          chaines
  46. //
  47. //str     : vecteur de chaine de caracteres correspondant a la reponse
  48. //%Remarques
  49. //Dans l'environnement Xwindow  cette  macro provoque  l'ouverture d'une
  50. //fenetre de dialogue. L'utilisateur devant alors y  entrer et/ou editer
  51. //sa reponse eventuellement su plusieurs lignes
  52. //
  53. //Dans un autre environnement la macros affiche le  commentaire   dans
  54. //la fenetre basile et attend que l'utilisateur fournisse le texte de
  55. // sa reponse ou simplement retour-chariot (reponse par defaut).
  56. // Dans ce cas la reponse doit etre donnee en une seule ligne
  57. //%exemple
  58. // gain=evstr(dialog('donnez le gain du transfert','0.75'))
  59. // bode(evstr(dialog(['BODE';'Entrez le nom du systeme'],'h')),0.01,100)
  60. //!
  61. [lhs,rhs]=argn(0)
  62. if rhs==1 then default=' ',end
  63. comment=matrix(comment,prod(size(comment)),1)
  64. default=default(1) // for lmitool
  65. write(%IO(2),[comment;'reponse par defaut :'+default;' '])
  66. str=readline()    
  67. if str==' ' then str=default,end
  68. write(%IO(2),'o[k]/c[ancel]')
  69. rep=readline()    
  70. if part(rep,1)=='c' then str=[],end
  71.  
  72.  
  73.  
  74. function str=x_mdialog(description,labels,valuesini)
  75. //mdialog - dialogue d'acquisition de plusieures reponses textuelles
  76. //%Syntaxe
  77. //str=dialog(description,labels [,valuesini])
  78. //%Parametres
  79. //description : vecteur de chaines contenant le texte commentaire des
  80. //             reponses demandees
  81. //labels      : vecteur des chaines de caracteres donnant le texte associe
  82. //              a chacun des champs question
  83. //valuesini   : vecteur des chaines de caracteres donnant la reponse par 
  84. //              defaut pour chacun des champs.
  85. //
  86. //str     : chaine de caracteres correspondant a la reponse
  87. //%Remarques
  88. //Dans l'environnement Xwindow  cette  macro provoque  l'ouverture d'une
  89. //fenetre de dialogue. L'utilisateur devant alors y  entrer et/ou editer
  90. //sa reponse.
  91. //
  92. //Dans un autre environnement la macros affiche le  commentaire   dans
  93. //la fenetre basile et attend que l'utilisateur fournisse le texte de
  94. // sa reponse ou simplement retour-chariot (reponse par defaut).
  95. // Dans ce cas la reponse doit etre donnee en une seule ligne
  96. //%exemple
  97. // sig=mdialog('specifier le signal sinusoidal',..
  98. //             ['amplitude';'frequence';'phase    ';],['1';'10';'0'])
  99. // ampl=evstr(sig(1))
  100. // freq=evstr(sig(2))
  101. // ph=evstr(sig(3))
  102. //
  103. // rep=mdialog(['Simulation du systeme';'avec un regulateur PI'],..
  104. //                      ['gain proportionnel';'gain integral'],[' ';' '])
  105. //%Voir aussi
  106. //  x_dialog, x_choose, x_message, dialog, choose, message
  107. //!
  108. [lhs,rhs]=argn(0)
  109. n=prod(size(labels))
  110. if rhs==2 then valuesini(n)=' ',end
  111.  
  112.   write(%IO(2),description)
  113.   n=prod(size(labels))
  114. //  disp('ici');pause
  115.   for k=1:n
  116.     write(%IO(2), labels(k) +' valeur par defaut :'+valuesini(k))
  117.     str(k,1)=readline()
  118.     if str(k)==' ' then str(k)=valuesini(k),end
  119.   end
  120.   write(%IO(2),'o[k]/c[ancel]')
  121.   rep=readline()
  122.   if part(rep,1)=='c' then str=[],end
  123. //  disp('la');pause
  124.  
  125. function num=x_choose(tochoose,comment,button)
  126. // choose - dialogue de selection
  127. //%Syntaxe
  128. // num=choose(tochoose,comment)
  129. //%Parametres
  130. //tochoose  : vecteur de chaines  de caracteres correspondants a  chacun
  131. //            des choix possibles
  132. //
  133. //comment : vecteur de chaine contenant le texte commentaire a ce choix
  134. //
  135. //button  : chaine de caractere donnant le texte a apparaitre dans le bouton
  136. //          de refus de choix
  137. //%Remarques
  138. //Dans l'environnement Xwindow  cette  macro provoque  l'ouverture d'une
  139. //fenetre de selection. L'utilisateur devant alors  designer a la souris
  140. //sa selection.
  141. //
  142. //Dans un autre environnement la macros affiche le texte des  choix dans
  143. //la fenetre basile et attend que l'utilisateur reponde par le numero du
  144. //choix qu'il veut effectuer la reponse 0 signifiant le refus des choix.
  145. //%Exemple
  146. //  choose(['PID';'Adaptatif';'LQG'],'Choisissez un type de regulateur')
  147. //!
  148. [lhs,rhs]=argn(0)
  149. n=prod(size(tochoose))
  150. tochoose=matrix(tochoose,n,1)
  151. comment=matrix(comment,prod(size(comment)),1)
  152. if rhs==2 then button='Annuler',end
  153.  
  154. sep=[],
  155. for l=0:n,sep=[sep;':'],end
  156. lmx=maxi([length(tochoose);length(comment)])
  157.   
  158. tochoose=[string(0:n)', [button;tochoose]]
  159.  
  160. write(%IO(2),[comment;' ';mat2tab(tochoose)])
  161. num=-1
  162. while num<0|num>n  then
  163.   write(%IO(2),'Donnez le numero de votre choix')
  164.   num=evstr(readline())
  165. end
  166.  
  167.  
  168.  
  169. function tab=mat2tab(str,del)
  170. //Etant   donne une  matrice  de chaine  de  caracteres str, mat2tab(str)
  171. //retourne un vecteur colonne de chaines de caracteres  representant les
  172. //elements de str repartis sous forme d'un tableau.
  173. //mat2tab(str,del) (ou del est un vecteur de chaines a un ou deux elements) 
  174. //  retourne le meme tableau ou les colonnes sont separees par la chaine de
  175. //   caracteres contenue dans del(1) et lignes par del(2) s'il exite
  176. //%Exemple
  177. //  tt=['0','a';'1','b';'2','c']
  178. //  write(%io(2),mat2tab(tt))
  179. //  write(%io(2),mat2tab(tt,'|'))
  180. //  write(%io(2),mat2tab(tt,['|','-']))
  181. //!
  182. //origine S Steer 1991
  183. [lhs,rhs]=argn(0)
  184. job=0
  185. if rhs=1 then 
  186.   delc=' ',
  187. else
  188.   delc=del(1)
  189.   if prod(size(del))=2 then
  190.     dell=del(2)
  191.     dell=part(dell,1)
  192.     job=1
  193.   end
  194. end
  195. blk='                              ';blk=blk+blk+blk
  196.  
  197. [m,n]=size(str);len=length(str)
  198. lmx=[];for col=len,lmx=[lmx,maxi(col)+1],end
  199.  
  200. ln=sum(lmx)+(n+1)*length(delc)
  201. if job=1 then
  202.   rd=delc
  203.   for l=2:ln-1,rd=rd+dell,end
  204.   rd=rd+delc
  205.   tab=rd
  206. else
  207.   tab=[]
  208. end
  209. for l=1:m
  210.   ll=delc+str(l,1)
  211.   for k=2:n
  212.  
  213.     ll=ll+part(blk,1:lmx(k-1)-len(l,k-1))+delc+str(l,k)
  214.   end
  215.   ll=ll+part(blk,1:lmx(n)-len(l,n))+delc
  216.   tab=[tab;ll]
  217.   if job=1 then tab=[tab;rd],end
  218. end 
  219.  
  220.  
  221. function [btn,xc,yc,win]=xclick();
  222. str=readline()
  223. rep=evstr('['+str+']')
  224. btn=rep(1)
  225. xc=rep(2)
  226. yc=rep(3)
  227. if size(rep,'*')==4 then win=rep(4),end
  228.  
  229. function str=readline()
  230. rep=read(%IO(1),1,1,'(a)')
  231. comm='/'+'/'
  232. n=length(rep);n0=n
  233. with=%f
  234. while n>1 do
  235.   if part(rep,n-1:n)==comm then
  236.     n=n-2
  237.     with=%t
  238.     break
  239.   end
  240.   n=n-1
  241. end
  242. if with then
  243.   com=part(rep,n+2:n0)
  244.   if n==0 then 
  245.     str=emptystr()
  246.   else
  247.     str=part(rep,1:n)
  248.   end
  249. else
  250.   str=rep
  251.   com=emptystr()
  252. end
  253. str=stripblanks(str)
  254. bl='=';txt=com+':'+str;txt=part(bl,ones(1,60-length(txt)))+txt
  255. write(%io(2),[' ';txt;' '])
  256.     
  257.  
  258.  
  259.